import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router'
import NProgress from 'nprogress'

// 创建axios实例
const service = axios.create({
  baseURL: '/api', // API基础URL
  timeout: 15000 // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 开始进度条
    NProgress.start()
    
    // 从本地存储获取token
    const token = localStorage.getItem('token')
    
    // 如果有token，添加到请求头
    if (token) {
      // 确保 token 格式正确
      config.headers['Authorization'] = token.startsWith('Bearer ') ? token : `Bearer ${token}`
      
      // 添加调试日志
      console.log('请求头:', config.headers)
      console.log('请求URL:', config.url)
      console.log('请求方法:', config.method)
    } else {
      console.log('未找到token')
    }
    
    return config
  },
  error => {
    NProgress.done()
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 结束进度条
    NProgress.done()
    
    // 添加调试日志
    console.log('响应数据:', response.data)
    
    // 如果响应成功，返回响应数据
    return response.data
  },
  error => {
    // 结束进度条
    NProgress.done()
    
    // 添加详细的错误日志
    console.error('响应错误:', error)
    console.error('错误配置:', error.config)
    console.error('错误状态:', error.response?.status)
    console.error('错误数据:', error.response?.data)
    
    // 处理错误响应
    const { response } = error
    
    if (response) {
      // 处理401未授权错误
      if (response.status === 401) {
        // 检查是否在登录页面
        if (router.currentRoute.path !== '/admin/login') {
          Message.error('登录已过期，请重新登录')
          localStorage.removeItem('token')
          router.push({
            path: '/admin/login',
            query: { redirect: router.currentRoute.fullPath }
          })
        }
      } else {
        // 处理其他错误
        const errorMessage = response.data.message || '请求失败'
        Message.error(errorMessage)
      }
    } else {
      // 处理网络错误
      Message.error('网络错误，请检查您的网络连接')
    }
    
    return Promise.reject(error)
  }
)

export default service 